﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ECOSYSTEM_BL;
using ECOSYSTEM_Dominio;

namespace ECOSYSTEMPRESENTACION
{
    public partial class frmReciboEgreso : Form
    {
        public frmReciboEgreso()
        {
            InitializeComponent();
        }
        ClienteBL elClienteBl = new ClienteBL();
        ReciboEgreso elRecEgreso = new ReciboEgreso();
        ReciboEgresoBL elRecEgresoBL = new ReciboEgresoBL();

        private ReciboEgreso ObtenerObjetoRecEgreso()
        {
            elRecEgreso.NroRecEgreso = txtNroReciboEgre.Text;
            elRecEgreso.Concepto = txtDetalleEgre.Text;
            elRecEgreso.Monto = Convert.ToDouble(txtMontoRecIngre.Text);
            elRecEgreso.ElCliente = txtDNICliente.Text;
            elRecEgreso.FecRegistro = dtpFecReg.Text;            
            return elRecEgreso;
        }
        private Boolean guardarReciboEgreso()
        {
            ReciboEgreso elRecEgreso = ObtenerObjetoRecEgreso();
            elRecEgresoBL.guardarReciboEgreso(elRecEgreso);
            return true;
        }
        //PARA ACTUALIZAR
        private ReciboEgreso ObtenerObjetoActualizarRecEgreso() {
            elRecEgreso.NroRecEgreso = txtNroReciboEgre.Text;
            elRecEgreso.Concepto = txtDetalleEgre.Text;
            elRecEgreso.Monto = Convert.ToDouble(txtMontoRecIngre.Text);
            elRecEgreso.ElCliente = txtDNICliente.Text;
            elRecEgreso.FecRegistro = dtpFecReg.Text;            
            return elRecEgreso;
        }
        private Boolean ActualizarreciboEgreso() {
            ReciboEgreso elRecEgreso = ObtenerObjetoActualizarRecEgreso();
            if(txtNroReciboEgre.Text == lblNroRecibo.Text)
                elRecEgresoBL.ActualizarReciboEgreso(elRecEgreso, Convert.ToInt32(lblReciboEgresoID.Text),"");
            else
                elRecEgresoBL.ActualizarReciboEgreso(elRecEgreso, Convert.ToInt32(lblReciboEgresoID.Text), txtNroReciboEgre.Text);
            return true;
        }
        //LLENAR COMBO DE CLIENTES
        private void LlenarCliente()
        {
            if (cmbCliente.DataSource == null)
            {
                cmbCliente.DataSource = elClienteBl.ObtenerClientes("Todos");
                cmbCliente.DisplayMember = "Cliente";
                cmbCliente.ValueMember = "RUC-DNI";
                txtDNICliente.Text = "";
            }
        }
        //LLENAR DATAGRIDVIEW CON LA LISTA DE RECIBOS DE EGRESOS Y DATABINDING (PARA FILTRAR)
        private void LlenarGrillaReciboEgreso()
        {
            if (dgvListaReciboEgreso.DataSource == null)
            {
                dgvListaReciboEgreso.DataSource = elRecEgresoBL.ObtenerReciboEgresos();
                filtrador.DataSource = elRecEgresoBL.ObtenerReciboEgresos();
            }
        }
        private void limpiarCampos()
        {
            txtFiltrar.Text = "";
            dgvListaReciboEgreso.DataSource = null;
            txtNroReciboEgre.Text = "";
            cmbCliente.DataSource = null;
            txtDNICliente.Text = "";
            txtMontoRecIngre.Text = "";
            lblReciboEgresoID.Text = "";
            txtDetalleEgre.Text = "";
            groupBox2.Enabled = false;
            groupBox3.Enabled = false;
            btnBuscar.Enabled = true;
            btnGuardar.Enabled = false;
            btnActualizar.Enabled = false;
            btnCancelar.Enabled = false;
            btnNuevo.Enabled = true;
            dtpFecReg.Value = DateTime.Now;
        }
        private void AplicarFiltro()
        {
            int ret = filtrar_dgvListaProducto("Nombre", txtFiltrar.Text.Trim(), filtrador, dgvListaReciboEgreso);
            if (ret == 0)
            {
                txtFiltrar.BackColor = Color.Red;
            }
            else
            {
                txtFiltrar.BackColor = Color.White;
            }
        }
        private int filtrar_dgvListaProducto(String Columna, String texto, BindingSource Binding, DataGridView data)
        {
            if (filtrador.DataSource == null) { return 0; }
            try
            {
                String filtro = String.Empty;
                filtro = "LIKE '" + texto.Trim() + "%'";
                if (filtro != String.Empty)
                {
                    filtro = "[" + Columna + "]" + filtro;
                }
                Binding.Filter = filtro;
                data.DataSource = Binding.DataSource;
                return Binding.Count;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return 0;
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            try
            {
                groupBox3.Enabled = true;
                btnBuscar.Enabled = false;
                btnGuardar.Enabled = true;
                btnCancelar.Enabled = true;
                txtNroReciboEgre.Select();
                LlenarCliente();
                cmbCliente.Text = "";
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                limpiarCampos();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void cmbCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                txtDNICliente.Text = Convert.ToString(cmbCliente.SelectedValue);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                guardarReciboEgreso();
                MessageBox.Show("RECIBO DE EGRESO REGISTRADO CORRECTAMENTE");
                limpiarCampos();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                groupBox2.Enabled = true;
                btnNuevo.Enabled = false;
                btnBuscar.Enabled = false;
                btnCancelar.Enabled = true;
                LlenarGrillaReciboEgreso();
                cmbCliente.Text = "";
                txtDNICliente.Text = "";
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void txtFiltrar_TextChanged(object sender, EventArgs e)
        {
            AplicarFiltro();
        }

        private void dgvListaReciboEgreso_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            Int32 nroFila = Int32.Parse(e.RowIndex.ToString());
            groupBox3.Enabled = true;
            btnActualizar.Enabled = true;
            LlenarCliente();
            txtNroReciboEgre.Text = Convert.ToString(dgvListaReciboEgreso["Codigo", nroFila].Value);
            lblNroRecibo.Text = Convert.ToString(dgvListaReciboEgreso["Codigo", nroFila].Value);
            cmbCliente.SelectedValue = dgvListaReciboEgreso["RUC_DNI_Cliente", nroFila].Value;
            txtDNICliente.Text = Convert.ToString(cmbCliente.SelectedValue);
            dtpFecReg.Value = Convert.ToDateTime(dgvListaReciboEgreso["FecRegistro",nroFila].Value);
            txtMontoRecIngre.Text = Convert.ToString(dgvListaReciboEgreso["Monto", nroFila].Value);
            txtDetalleEgre.Text = Convert.ToString(dgvListaReciboEgreso["Concepto", nroFila].Value);
            lblReciboEgresoID.Text = Convert.ToString(dgvListaReciboEgreso["ReciboEgresoID",nroFila].Value);
        }

        private void btnActualizar_Click(object sender, EventArgs e)
        {
            try
            {
                ActualizarreciboEgreso();
                MessageBox.Show("RECIBO DE EGRESO ACTUALIZADO CORRECTAMENTE");
                limpiarCampos();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void frmReciboEgreso_Load(object sender, EventArgs e)
        {
            dtpFecReg.Value = DateTime.Now;
        } 
    }
}
